/*

    tools23d - tools for converting images to 3D formats.
    Copyright (C) 2014  Dave Gorst

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

#include <stdlib.h>
#include "tools23d.h"

/**
Append new entry to resizing string array.

@param	number_of_entries	Pointer to the current number of entries in the string list.
@param	stringlist			Pointer to string list array.
@param	new_entry			Pointer to string to be added to list.
@return	Pointer to reallocated string list. NULL if failure to reallocate.
*/

char ** T3D_AddToList (unsigned int * number_of_entries, char ** stringlist, char * new_entry)
{
	char ** realloc_ptr;

	++*number_of_entries;
	
	if (stringlist== NULL)
		stringlist = (char **) malloc (sizeof (char *));
	else
	{
		realloc_ptr = (char **) realloc(stringlist, *number_of_entries * sizeof (char *));
		if (realloc_ptr == NULL)
		{
			free (realloc_ptr = stringlist);
			/* return ENOMEM; */
			/* TODO Check list freed here. */
			return NULL;
		}
		else
			stringlist= realloc_ptr;
	}

	stringlist [*number_of_entries - 1] = new_entry;
	
	return stringlist;
}

/**
Destroy string array.

@param	number_of_entries	Pointer to the current number of entries in the string list.
@param	stringlist			Pointer to string list array.
*/


void T3D_DestroyList (unsigned int number_of_entries, char ** stringlist)
{
	if (number_of_entries)
	{
		do
		{
			number_of_entries--;
			free (stringlist [number_of_entries]);
		}
		while (number_of_entries);
	}

	free (stringlist);
}

